#define _CRT_SECURE_NO_WARNINGS 1 
//#include <iostream>
//using namespace std;
//#include "priority_queue.h"
//
//using namespace std;
//
//int main()
//{
//	vector<int> v = { 3,2,1,4,7,9,8,5,6};
//	cgc::priority_queue<int> pq(v.begin(),v.end());
//
//	return 0;
//}

//#include <iostream>
//#include <vector>
//using namespace std;
//
//template<class T>
//class Greater
//{
//public:
//	bool operator()(int x, int y)
//	{
//		return x > y;
//	}
//};
//
//template<class T>
//class Less
//{
//public:
//	bool operator()(int x, int y)
//	{
//		return x < y;
//	}
//};
//
//template<class T,class Compare = Less<T>>
//void BubbleSort(vector<T>& v, Compare com = Compare())
//{
//	for (int i = 0; i < v.size() - 1; i++)
//	{
//		for (int j = 0; j < v.size() - i - 1; j++)
//		{
//			if (com(v[j + 1], v[j]))
//			{
//				swap(v[j + 1], v[j]);
//			}
//		}
//	}
//}
//
//int main()
//{
//	vector<int> v1 = { 9,3,5,2,7,4,6 };
//	vector<int> v2 = { 9,3,5,2,7,4,6 };
//
//	BubbleSort(v1);
//	BubbleSort<int>(v2,Greater<int>());
//
//	for (const auto& e : v1)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//	for (const auto& e : v2)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//}

//#include <iostream>
//#include <vector>
//#include <algorithm>
//using namespace std;
//
//class OP1
//{
//public:
//	int operator()(int x)
//	{
//		return x * 2;
//	}
//};
//
//int main()
//{
//	vector<int> v1 = { 1,5,3,6,3,7,5 };
//	transform(v1.begin(), v1.end(), v1.begin(), OP1());
//	for (const auto& e : v1)
//	{
//		cout << e << " ";
//	}
//	cout << endl;
//
//	return 0;
//}
#include <queue>
#include <iostream>
using namespace std;
#include "priority_queue.h"

int main()
{
	cgc::priority_queue<int, vector<int>, Greater<int>> pq;

	pq.push(3);
	pq.push(4);
	pq.push(8);
	pq.push(1);
	pq.push(1);

	while (!pq.empty())
	{
		cout << pq.top() << " ";
		pq.pop();
	}

	return 0;
}